home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 2.toast / pc / sample code / quicktime / quicktimeintro / graphic import.export / start code / movietoimages.c < prev    next >
Encoding:
Text File  |  2000-10-06  |  4.0 KB  |  136 lines

  1. // Graphics Importer and Exporter Samples
  2. // This example opens a movie file, allows you to save
  3. // the movie as a sequence of frames. It then creates a new
  4. // reference movie from those images and saves it.
  5. // Originally written by Sam Bushell for QuickTime "Live" '99
  6. // WWDC 2000 Introduction to QuickTime
  7.  
  8. #include "MacShell.h"
  9.  
  10. void MovieToImage( void )
  11. {
  12.     OSErr  err = noErr;
  13.     Handle hOpenTypeList = NewHandle(0);
  14.     long  numTypes = 0;
  15.     FSSpec theFSSpec;
  16.     Boolean isSelected, isReplacing;
  17.     Rect naturalBounds, windowBounds;
  18.     WindowPtr window = NULL;
  19.     short refNum = -1, resID = NULL;
  20.     Movie movie = 0;
  21.     MovieExportComponent movieExporter = 0;
  22.     Boolean canceled = true;
  23.     MovieImportComponent movieImporter = 0;
  24.     Track usedTrack;
  25.     TimeValue addedDuration;
  26.     long outFlags;
  27.     
  28.     BuildMovieValidFileTypes( hOpenTypeList, &numTypes );
  29.     if ( !hOpenTypeList ) return;
  30.     HLock( hOpenTypeList );
  31.  
  32.     err = GetOneFileWithPreview(numTypes, (OSTypePtr)*hOpenTypeList, &theFSSpec, NULL);
  33.     EmptyHandle( hOpenTypeList );
  34.     if ( err ) return;
  35.     
  36.     // open a movie file
  37.     err = OpenMovieFile( &theFSSpec, &refNum, fsRdPerm );
  38.     err = NewMovieFromFile( &movie, refNum, &resID, NULL, newMovieActive, NULL );
  39.     err = CloseMovieFile( refNum );
  40.     refNum = -1;
  41.     
  42.     GetMovieBox( movie, &naturalBounds );
  43.     windowBounds = naturalBounds;
  44.     OffsetRect( &windowBounds, 10, 45 );
  45.     window = NewCWindow( NULL, &windowBounds, "\pMovie <-> Images", true, documentProc, (WindowPtr)-1, true, 0);
  46.     SetPortWindowPort( window );
  47.     
  48.     // play the movie
  49.     SetMovieGWorld( movie, GetWindowPort( window), NULL );
  50.     GoToBeginningOfMovie( movie );
  51.     StartMovie( movie );
  52.     while( false == IsMovieDone( movie ) ) {
  53.         MoviesTask( NULL, 0 );
  54.     }
  55.     StopMovie( movie );
  56.     
  57.     pause();
  58.  
  59.     // save the movie as a sequence of image files.
  60.     err = PutFile( "\pSave as image sequence:", "\psequence", &theFSSpec, &isSelected, &isReplacing);
  61.     if (err) return;
  62.     
  63.     // open a movie exporter
  64. // Step 1. Insert OpenADefaultComponent1.clp here...
  65.  
  66.     
  67.     // configure the export component by showing the dialog box
  68. // Step 2. Insert MovieExportDoUserDialog.clp here...
  69.  
  70.     if( canceled ) return;
  71.     
  72.     // attach a progress function; -1 for default progress function
  73.     SetMovieProgressProc( movie, (MovieProgressUPP)-1, 0 );
  74.     
  75.     // convert the movie into a specified file(s) and type
  76. // Step 3. Insert ConvertMovieToFile.clp here...
  77.     
  78.     CloseComponent( movieExporter );
  79.     DisposeMovie( movie );
  80.     movie = 0;
  81.     EraseRect( &naturalBounds );
  82.     
  83.     // now re-open the sequence of image files as a reference movie
  84.     BuildGraphicsImporterValidFileTypes( hOpenTypeList, &numTypes );
  85.     HLock( hOpenTypeList );
  86.  
  87.     err = GetOneFileWithPreview(numTypes, (OSTypePtr)*hOpenTypeList, &theFSSpec, NULL);
  88.     DisposeHandle( hOpenTypeList );
  89.     if ( err ) return;
  90.  
  91.     // open a movie importer
  92. // Step 4. Insert OpenADefaultComponent2.clp here...
  93.     
  94.     // we're using a movie importer that imports images using graphics importers
  95.     // this subType-specific call enables the "Import Image Sequence..." behaviour,
  96.     // letting the movie importer search for adjacent files with names matching a numeric pattern.                     
  97.     GraphicsImageImportSetSequenceEnabled( movieImporter, true );
  98.     canceled = true;
  99.     
  100.     // configure the import component by showing the user dialog box
  101. // Step 5. Insert MovieImportDoUserDialog.clp here...
  102.  
  103.     if( canceled ) return;
  104.     
  105.     // create the new movie
  106.     movie = NewMovie(newMovieActive);
  107.     
  108.     // do the import of the sequence
  109. // Step 6. Insert MovieImportFile.clp here...
  110.  
  111.     CloseComponent( movieImporter );
  112.  
  113.     // play the reference movie.
  114.     SetMovieGWorld( movie, (GWorldPtr)window, NULL );
  115.     GoToBeginningOfMovie( movie );
  116.     StartMovie( movie );
  117.     while( false == IsMovieDone( movie ) ) {
  118.         MoviesTask( NULL, 0 );
  119.     }
  120.     StopMovie( movie );
  121.     
  122.     // save the reference movie.
  123.     err = PutFile( "\pSave as reference movie:", "\preference movie.mov", &theFSSpec, &isSelected, &isReplacing);
  124.     if (err) return;
  125.  
  126.     // create a movie file; has options controled by flags
  127. // Step 7. Insert CreateMovieFile.clp here...
  128.  
  129.  
  130. // Step 8. Insert Step8.clp here...
  131.     
  132.     UpdateMovie( movie );
  133.     MoviesTask( NULL, 0 );
  134.     DisposeMovie( movie );
  135. }
  136.